#ifndef __KEY_RECOMMANDER_H_
#define __KEY_RECOMMANDER_H_
#include "nlohmann/json.hpp"
#include "Dictionary.h"
#include <string>
#include <queue>
#include <vector>
using std::pair;
using std::priority_queue;
using std::string;
using std::vector;
using nlohmann::json;

class CandidateResult
{
public:
    string _word;
    int _freq;
    int _dist;
};

// 自定义比较器（仿函数）
class CandidateCompare
{
public:
    bool operator()(const CandidateResult &a, const CandidateResult &b)
    {
        // 优先按_dist升序（小的优先级高）
        if (a._dist != b._dist)
        {
            return a._dist > b._dist; // 注意：> 表示a._dist大时优先级低
        }
        // _dist相等时，按_freq降序（大的优先级高）
        return a._freq < b._freq; // < 表示a._freq小时优先级低
    }
};

class KeyRecommander
{
public:
    KeyRecommander(const string &word);
    void doQuery();

    string priority_queue_pop(int num);//返回队列中前num个关联词

private:
    string _sought;                          // 需要查询的单词
    priority_queue<CandidateResult,      
                   vector<CandidateResult>, //底层容器类型，它必须满足序列容器的要求
                   CandidateCompare> _prique; // 排好序的推荐词集合
};

#endif